home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / sbin / kernel-helper < prev    next >
Text File  |  2008-10-21  |  2KB  |  99 lines

  1. #!/bin/bash -e
  2.  
  3. # -i : Only create symlinks for the running kernel if a last-good-boot doesn't
  4. #      already exist.
  5. # -c : Create symlinks for a newly booted kernel. Usually called from an
  6. #      init script at the very start of the boot process.
  7.  
  8. kver=$(uname -r)
  9. mdir="/lib/modules/$kver"
  10. lastkdir="/boot/last-good-boot"
  11. lastmdir="/lib/modules/last-good-boot"
  12. fail_exit_val=1
  13.  
  14. if test -e /etc/default/kernel-helper-rc; then
  15.     . /etc/default/kernel-helper-rc
  16.  
  17.     if [ -n "$DISABLE_LAST_GOOD" ]; then
  18.         # Just quit silently
  19.         exit
  20.     fi
  21. fi
  22.  
  23. usage() {
  24.     echo "Usage: $(basename $0) -i|-u" 1>&2
  25.     echo "  -i Create initial last-good-boot" 1>&2
  26.     echo "  -u Update last-good-boot" 1>&2
  27.     echo 1>&2
  28.     exit 1
  29. }
  30.  
  31. [ "$#" -ne 1 ] && usage
  32. case "$1" in
  33. -i)
  34.     # Create initial last-good-boot.
  35.     if [ -d "$lastkdir" ] && [ -d "$lastmdir" ]; then
  36.         # Quit silently, a last-good-boot already exists.
  37.         exit 0
  38.     fi
  39.     # No fail here
  40.     fail_exit_val=0
  41.     ;;
  42. -u)
  43.     # Update last-good-boot.
  44.     ;;
  45. *)
  46.     usage
  47.     ;;
  48. esac
  49.  
  50. if [ "$(id -u)" -ne 0 ]; then
  51.     echo "$(basename $0): Need to be root to run this command" 2>&1
  52.     exit 1
  53. fi
  54.  
  55. if grep -q last-good-boot /proc/cmdline; then
  56.     # Quit silently. Don't update when booting the last good kernel
  57.     exit 0
  58. fi
  59.  
  60. if [ ! -e "/boot/vmlinuz-$kver" -a ! -e "/boot/$kver/vmlinuz" ]; then
  61.     # Fail, since we cannot do anything here
  62.     exit $fail_exit_val
  63. fi
  64.  
  65. rm -rf "${lastkdir}.tmp" "${lastmdir}.tmp"
  66.  
  67. install -d "${lastkdir}.tmp" "${lastmdir}.tmp"
  68.  
  69. if [ -e "/boot/$kver/vmlinuz" ]; then
  70.     ln -t "${lastkdir}.tmp" /boot/$kver/{vmlinuz,initrd.img,System.map}
  71. else
  72.     ln /boot/vmlinuz-$kver "${lastkdir}.tmp/vmlinuz"
  73.     ln /boot/initrd.img-$kver "${lastkdir}.tmp/initrd.img"
  74.     ln /boot/System.map-$kver "${lastkdir}.tmp/System.map"
  75. fi
  76.  
  77. cat /proc/cmdline > "${lastkdir}.tmp/cmdline"
  78. echo $kver > ${lastkdir}.tmp/version
  79.  
  80. if [ -e /proc/version_signature ]; then
  81.     cat /proc/version_signature > ${lastkdir}.tmp/version_signature
  82. fi
  83.  
  84. (cd $mdir && find . -print | cpio --pass-through -d --link \
  85.     "${lastmdir}.tmp") > /dev/null 2>&1
  86.  
  87. # Munge modules.dep
  88. rm -f "${lastmdir}.tmp/modules.dep"
  89. cat $mdir/modules.dep | sed -e \
  90.     "s#/lib/modules/$kver/#/lib/modules/last-good-boot/#g" > \
  91.     "${lastmdir}.tmp/modules.dep"
  92.  
  93. rm -rf "${lastkdir}" "${lastmdir}"
  94. mv "${lastkdir}.tmp" "${lastkdir}"
  95. mv "${lastmdir}.tmp" "${lastmdir}"
  96.  
  97. # We must now run update-grub to get the right cmdline in place
  98. [ ! -e /boot/grub ] ||  update-grub 2>/dev/null
  99.